encapsulation vs abstraction